package com.glela.order.mapper;

import java.util.Collection;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import com.glela.order.model.OrderObject;
import com.glela.platform.model.User;
import com.glela.platform.vo.GoodsSimpleVo;

public interface OrderObjectMapper {
	
	int deleteByPrimaryKey(Long id);

	int insert(OrderObject record);

	int insertSelective(OrderObject record);

	OrderObject selectByPrimaryKey(Long id);

	int updateByPrimaryKeySelective(OrderObject record);

    int updateByPrimaryKey(OrderObject record);
    
    public List<GoodsSimpleVo> selectGetOrderGoodsInfo(@Param("goods") List<GoodsSimpleVo> goods);

	List<GoodsSimpleVo> selectGetOrderGoodsInfoByInventoryIds(@Param("inventoryIds") Collection<Long> inventoryIds);
    public OrderObject selectByOrderSn(String orderSn);
    
	/**
	 * <dl>
	 * <dt>查询可分佣交易单</dt>
	 * <dd><code>update_time-refund_start_time>7</code>最后更新时间大于售后开始7天可分佣</dd>
	 * <dd>状态为4已完成且不在售后中0</dd>
	 * </dl>
	 * @return List<OrderObject>
	 * @author zls
	 */
	List<OrderObject> selectOrderObjectForCommision();
    
	/**
	 * <dl>
	 * <dt>更新交易单状态为交易成功</dt>
	 * <dd>交易单状态为已完成4</dd>
	 * </dl>
	 * @param orderObjectList item.id 交易单id
	 * @return int
	 * @author zls
	 */
	int updateStatusInId(List<OrderObject> orderObjectList);
    
	int updateOrderObjectPay(@Param("id") long id, @Param("bankIn") long bankIn, @Param("procedureFee") long procedureFee, @Param("payType") int payType, @Param("paymentFee") long paymentFee, @Param("payId") String payId, @Param("payTime") String payTime);
    
    int updateOrderObjectPayUrlById(@Param("id") long id,@Param("payUrl") String payUrl);
    
    OrderObject selectOrderObjectByPaySn(@Param("paySn") String paySn);
    
    int updateHandlestatusByOrderSn(String orderSn);
    
    public List<OrderObject> selectDiTemp();

	/** MaoZeYao **/

	/**
	 * 根据父订单的状态查询 list
	 * 
	 * @return
	 */
	List<OrderObject> selectOrderObjectByStatus(int status);

	/**
	 * 修改父订单的评论状态
	 * 
	 * @return
	 */
	int updateOrderObjectToCommentSuccess(Long orderObjectId);

	/**
	 * 修改父订单的状态为已关闭 5
	 * 
	 * @param id
	 * @return
	 */
	int updateOrderObjectStatusById(@Param("orderObjectId") Long orderObjectId, @Param("status") int status,
			@Param("updateTime") String updateTime);

	int updateOrderObjectStatusById2(@Param("orderObjectId") Long orderObjectId, @Param("status") int status,
			@Param("updateTime") String updateTime);
	
	int updateOrderObjectAndOtherInformationById(@Param("orderObjectId") Long orderObjectId, @Param("status") int status,
			@Param("updateTime") String updateTime);

	/**
	 * 根据父订单的状态和评论状态查询父订单集合
	 * 
	 * @param status
	 * @param commentStatus
	 * @return
	 */
	List<OrderObject> selectOrderObjectByStatusAndCommontStatus(@Param("status") int status,
			@Param("commentStatus") int commentStatus, @Param("startIndex") int startIndex, @Param("pageSize")int pageSize);

	/** MaoZeYao **/

	/**
	 * 查询待支付订单
	 * 
	 * @author chengzhequan
	 * @param orderObject
	 * @return
	 */
	public List<OrderObject> selectOrderObjectDaizhifuByUserId(@Param("userId") long userId,
			@Param("pagelimit") int pagelimit, @Param("pageSize") int pageSize);

	
	/**
	 * 某个用户待支付的订单个数
	 * 
	 * @author 卫耀华
	 * 
	 * @param userId
	 * @return
	 */
	int selectNeedToPayOrderNum(Long userId);
	
	public OrderObject selectOrderObjectByOrderSn(String orderSn);
	
	public OrderObject selectOrderObjectByOrderSnTwo(String orderSn);

	List<OrderObject> selectOrderObjectByStatusAndPageLimit();

	int updateRefundTimeById(@Param("id") long orderObjectId, @Param("timeMillin") int timeMillin);

	/**
	 * 分佣开关
	 * @param orderObjectId
	 * @return
	 */
	int updateOrderObjectRefundByFlag(Long orderObjectId);

	public OrderObject selectOrderObjectById(long id);

	int updateOrderObjectFreightNo(@Param("id") Long id, @Param("refundFeeNo") String refundFeeNo);
	
	public List<String> selectOrderObjectHandleStatus();
	
	/**
	 * <dl>
	 * <dt>查询指定支付类型的订单</dt>
	 * </dl>
	 * @param orderObjectIdList 订单id
	 * @param payType 支付类型集合
	 * @return List<String>
	 * @author gwq
	 * @date 2017年12月20日 下午7:00:28
	 */
	public List<String> selectOrderObjectByIdListWithStatusAndPayType(@Param("orderObjectIdList")List<Long> orderObjectIdList,@Param("payType") int[] payType,@Param("OrderStatus") int[] OrderStatus);

	/**
	 * <dl>
	 * <dt>查询开店订单</dt>
	 * </dl>
	 * @param buyUserId 购买人
	 * @return List<OrderObject>
	 * @author zls
	 * @date 2017年8月23日 下午7:00:28
	 */
	List<OrderObject> selectOpenOrder(Long buyUserId);
	/**
	 * <dl>
	 * <dt>依照支付时间查询支付成功的非零元付易宝订单</dt>
	 * </dl>
	 * @param beginTime 起始时间
	 * @param endTime 结束时间
	 * @return List<OrderObject>
	 * @author gwq
	 * @date 2017年10月21日 下午4:00:28
	 */
	List<OrderObject> selectOrderByPayTime(@Param("beginTime") String beginTime,@Param("endTime") String endTime);

	/**
	 * <dl>
	 * <dt>查询订单所有推荐人信息</dt>
	 * </dl>
	 * @param id 交易单id
	 * @return List<User>
	 * @author zls
	 * @date 2017年6月23日 下午5:27:22
	 */
	List<User> selectOrderRecommendFromUser(Long id);

	/**
	 * <dl>
	 * <dt>查询时间段内的指定状态的订单</dt>
	 * </dl>
	 * @param status 状态集合
	 * @param beginTime 开始时间
	 * @param endTime 结束时间
	 * @return List<OrderObject>
	 * @author gwq
	 * @date 2017年10月24日 下午5:27:22
	 */
	List<OrderObject> selectOrderObjectByStatusAndCreatTime(@Param("ststusArray") int[] status,
			@Param("beginTime") String beginTime, @Param("endTime") String endTime);

	/**
	 * <dl>
	 * <dt>查询更新时间段内的指定状态的订单</dt>
	 * </dl>
	 * @param status 状态集合
	 * @param beginTime 开始时间
	 * @param endTime 结束时间
	 * @return List<OrderObject>
	 * @author gwq
	 * @date 2017年11月4日 下午5:27:22
	 */
	List<OrderObject> selectOrderObjectByStatusAndUpdateTime(@Param("statusArray") int[] statusArray, @Param("beginTime") String beginTime, @Param("endTime") String endTime);

   	public  int selectNeedToPayOrderNumBatch( @Param("userIds") List<Long> userIds);

    int selectNeedToPayOrderNumShop(Map<String, Object> queryMap);

	int selectCountByStatus(@Param("userId") Long userId, @Param("status") int status);
}


